そろろろRailsについて本音を書いてみるかについてです。ひがさんはよほど Ruby/Rails の心配をしてくださっているようなので、Rails ユーザの一人として非常にありがたく思うのと同時に、ひがさんの心配のいくつかは取り除くべきかなと感じました。
■ ひがさんの心配:Ruby/Rails ユーザはテストに無関心
Railsで、最も良いところは、テストの雛形も自動的に作ってくれて、テストの敷居を下げてくれてるところだと思う。なのに、それについて触れる人があまりにも少ないような気がする。一応、私は、1年半以上、はてなのキーワード検索で毎日Railsについては調べているので、はてなでRailsについて書いている人の記事はたいてい見ています。
確かにそのような状況が事実であれば、ひがさんが心配されるのも当然のことです。テストのことを考えない Ruby/Rails ユーザはとんでもないやつらだ!
しかし、テストについては、Rails ユーザの間ではよく語られています。勉強会でもセッションネタになりますしね。はてなで記事が上がりにくいのは、最初から仕組みが提供されていて、ノウハウネタになりにくいからかもしれません。RSpec on Rails や Shoulda のような標準装備されてないテスト技術については記事が上がりやすいので、そちらに目を配るのもありでしょう。
今、私も
Kodougu(Rails で開発したモデリングツール)の製品化にあたって(ようやく)テストを整備しているのですが、日本語でもテストのノウハウは結構入手できるので、Rails ユーザが特別テストに対して疎いとは感じませんでした。
また、Ruby/Rails ユーザは Java ユーザと結構かぶっているので、Rails に来て急にテストに疎くなる人はいないと思います。かく言う私も、一年前までは Seasar2 ユーザでした。
■ ひがさんの心配:Rails ユーザは見積もり時にテスト工数を省いている
RailsがJavaに対して生産性が高いっていっているのは、テスト工数が見積もりからもれている可能性が高いんじゃないかと思う。
確かに、Ruby/Rails ユーザが「テスト工数を省くことで生産性の優位性を主張している」とすれば悪質(あるいはとんだ無知)ですね。ひどい話だ!
でも、Ruby/Rails ユーザが生産性を主張するのは、Rails や Ruby の記述性であり、ジェネレータであり、プラグインであり、マイグレーションであり、Capistrano のようなデプロイツールであるわけです。そして、Ruby/Rails コミュニティは今でも最もテストに気を使っているコミュニティの一つです。何せ、テスト用に DSL まで作っちゃうんだから!
おそらく、今 SAStruts はようやく RC3 が出た状況で、私はよく知りませんが SAStruts で Seasar2 ファミリは生産性においても Rails に追い付いた(あるいは凌駕した)という状態なのでしょう。であれば、正確には「現時点から、Rails が Java より生産性が高いと主張する人は、見積もりからテストが漏れている可能性がある(あるいは品質面で何かを落としている可能性がある)」と主張されるのが妥当でしょう。
いずれにしても、この話題は Ruby/Rails とは関係ない話のようです。いつの時代にもどんな技術でも、見積もり時にテスト工数(あるいは何らかの品質)を切り捨てることで優位性を主張する人はいますから。
■ ひがさんの心配:スクリプト言語を使っていると Java よりも多くのテストを書く必要がある
スクリプト言語は、コンパイラがミスを教えてくれることはないので、Javaと比べると、より多くのテストを書く必要があります。でも、そんな話ほとんど聞いたことないですよね。
確かに、スクリプト言語の方がテスト工数が増えるなら、そのことをしっかりと説明しなくてはだめです。あぁ、そんなことも指摘しない Ruby/Rails ユーザは本当にひどいですね!
しかし、スクリプト言語の方がテストをシンプルに書けるという話もあり(特に Ruby は DSL 化しやすいため)、コンパイラの有無によって増減するテスト量とスクリプト言語が持つテストの記述性とを比較し合わないと、結論を出すことは難しいと私は考えています。
上記の話の前提として、そうした議論(あるいは実測値)で合意を得られているのでしょうか。
でも、「スクリプト言語を使ったら、テストが増える」という話は真実かもしれません。なにせ、スクリプト言語使いにはテストを書くのが好きな人がたくさんいますからね!
■ ひがさんの心配:スクリプト言語のコードは読みにくくて利用しにくい
後、この後の話は、RailsというよりRuby、Rubyというよりスクリプト言語のことなんだけど、他人の作ったソースコードを読んだり、利用したりするのは、スクリプト言語は、Javaと比べてつらいと思う。
ホント、こんな読みにくい理解しにくい利用しにくいスクリプト言語なんてものを勧めるなんて詐欺ですよ!
えーと、それは知りませんでした。(汗;;; 私は Ruby と Java の間にその種の優劣があるようには感じていませんが。。。
■ ひがさんの心配:Ruby はデバッグ環境が貧弱
後、デバッグの環境は、Javaに比べて貧弱だと思う。Railsでデバッグをする7つの方法を見てほしい。IDEでソースにブレークポイントを設定(ソースコードを書き換えるのではなく)して、ステップイン、ステップオーバー、メモリの状態を見たりなんてのに慣れているJavaから比べると、すっごく大変に見える。
確かに、Java から Ruby なんて言っておいて、デバッグが貧弱というのは詐欺ですよね!
ただ、実行中のブレークポイント、ステップ実行、変数値の参照くらいであれば、NetBeans では普通にできます。Ruby/Rails のデバッグは動かしながらコードを書きかえられるから快適だし、必ずしもデバッグ環境が弱いとは言えないでしょう。
もちろん、Ruby 関係の IDE が Java に追い付いていないという話は事実です。NetBeans でもリファクタリングはできますが、文脈から型を推測できないケースもあり、今後もスクリプト言語のリファクタリングを完全に自動化することは(無理ではないけど)むずかしいでしょう。
加えて、問題は、Ruby/Rails ユーザは vim や emacs 好きが多いため、IDE に関する情報が集まりにくいという問題もあります。これは、Rails コミュニティが改善していかなくてはならないことでしょう。
■ ひがさんの心配:Ruby は普通に書いたら遅いから使い物にならない
パフォーマンスが普通に作っても出ることは重要ですよ。後からチューニングが必要になるとそれだけ工数がかかってしまうから。
ほんと、
Ruby なんて遅くて使ってられないですよね!
もし、Rails のパフォーマンスが問題なら、それは Java で作っても問題になるケースか、そもそも Rails を適用すべきでない案件かという話になる・・・と私は考えています。そもそも、Rails を適用できる案件は Seasar2 ほど広くはないと思うのです。だから、対象範囲を絞らずにパフォーマンスの話をしてもさほど意味がないというのが私の考えです。
■ 私の本音
こんなおちょくった記事を書いておいて申し訳ないのですが、私はひがさんを dis りたいわけではないし、ひがさんが Rails を dis りたいわけでもないと私は考えています。単純に、「いまだに地に足のつかない雰囲気のある Rails でシステム開発をしても大丈夫なの?」と心配されているのではないかと私は考えています。
ひがさんのご指摘分は反論しましたが、やはり、私も Ruby/Rails ユーザの一人として、身を正していきたいなと感じました。
とか書いていたら、moro さん、瀧内さんが適切(というか有意義)な記事を書いていました。以下をご参照ください。
Re: そろろろRailsについて本音を書いてみるか - moroの日記
Rails 2.0でデバッグをする新しいやり方